leetcode C语言第二例 求和 |
您所在的位置:网站首页 › c语言 求和函数 › leetcode C语言第二例 求和 |
🤷♂️题目一: 剑指 Offer 64. 求1+2+…+n 求 1+2+...+n ,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。 此题有许多限制条件,导致许多方法难以奏效,要解决此题,首先我们得知道一个字符&&的意义: 🧐知识点补充: &&和||的介绍: && 和 || 是逻辑运算符,分别是逻辑与(&&)和逻辑或(||) 1) && (逻辑与):(三种) ① 当逻辑与左边为false,则不再进行逻辑与右边的判断,结果为false ② 当逻辑与左边为true,则进行右边判断,右边为false,结果为false ③ 当逻辑与左边为true,则进行右边判断,右边也为true,则结果为true 2) || (逻辑或):(三种) ① 当逻辑或左边为false,继续逻辑或右边的判断,如果也为false,结果为false ② 当逻辑或左边为false,继续逻辑或右边的判断,如果为true,结果为true ③ 当逻辑或左边为true,则不再进行逻辑或右边的判断,结果为true 看似好像都明白,但这题的题解可能会刷新你的认知 👍题解代码: int sumNums(int n){ n && (n += sumNums(n - 1)); return n; }当n=0时递归不执行,但这段代码看似会死循环,但我们深入剖析就能一探究竟,&&语句中的n与return中的n并不是同一个n,当第一句代码执行时,程序开始递归,n-1传进递归中,此时第一层递归的n实际是n-1,而后继续直至n=0,然后开始返回每层递归的n值,这就是这串代码的含义。 🤷♀️题目二: 剑指 Offer 57 - II. 和为s的连续正数序列 输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。 序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。 这题大体上并不难,用暴力查找即可,但一出问题的就是动态内存开辟,c语言中至关重要的两个点就是指针和动态内存管理 🧐知识点补充:
🐰二维数组的实质: 其实二维数组本质上还是一维数组,但它里面的元素是数组,这也解释了leetcode数组传参是出现二级指针的现象
🐭 malloc函数的讲解: malloc是动态内存分配函数,用于申请一块连续的指定大小的内存块区域以void*类型返回分配的内存区域地址 函数原型: extern void *malloc(unsigned int num_bytes) ;//num_bytes表示分配的长度 malloc如果分配成功则返回指向被分配内存的指针,否则返回空指针NULL。 重点:在使用malloc开辟空间时,使用完成一定要释放空间,如果不释放会造内存泄漏。 在使用malloc函数开辟的空间中,不要进行指针的移动,因为一旦移动之后可能出现申请的空间和释放空间大小的不匹配 使用形式: mallo函数返回的实际是一个无类型指针,必须在其前面加上指针类型强制转换才可以使用 指针自身 = (指针类型)malloc(sizeof(指针类型)数据数量) 在使用malloc开辟一段空间之后,系统会在这段空间之前做一个标记(0或1),当malloc函数开辟空间如果遇到标记为0就在此开辟,如果为1说明此空间正在被使用。
🐹 free函数讲解: malloc函数后面通常是跟着free函数,所以一起进行讲解 作用:释放malloc(或calloc、realloc)函数给指针变量分配的内存空间。 注意:使用后该指针变量一定要重新指向NULL,防止悬空指针(失效指针)出现,有效规避错误操作。 int *p = (int *)malloc(sizeof(int)); *p = 100; free(p); p = NULL; free函数在释放空间之后,把内存前的标志变为0,且为了防止数据泄露,它会把所释放的空间用cd进行填充。 👍解题代码: int** findContinuousSequence(int target, int* returnSize, int** returnColumnSizes){ int** result = (int**)malloc(sizeof(int*) * target); int* col = (int*)malloc(sizeof(int) * target); int t=target/2; int i=0;int j=0; int c=0;int size=0; for(i=1;i=target) break; } if(sum==target) { result[c]=(int*)malloc(sizeof(int*)* count); int k=0; for(j=i;j |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |